
import axios from 'axios'
import { Message, MessageBox } from 'element-ui'
import router from '@/router'
require('../../config/index')
// import store from '@/store'
// import { getToken } from '@/utils/auth';
// 是否正在刷新的标记
let isRefreshing = false;
// 重试队列，每一项将是一个待执行的函数形式
let requests = [];
axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
axios.defaults.withCredentials = true
// 创建axios实例：service
// debugger
// console.log(process)
const service = axios.create({
  baseURL: "/api/", //设置默认的URL前缀VUE_APP_BASE_API   process.env.VUE_APP_BASE_API
  withCredentials: true, // send cookies when cross-domain requests
  timeout: 60000 // 设置请求超时。如果超过了60秒，就会告知用户当前请求超时，请刷新等
});
service.setToken = (token) => {
  service.defaults.headers['Authorization'] = 'Bearer ' + token;
  window.localStorage.setItem('Admin-Token', token);
};

// 添加请求拦截器
service.interceptors.request.use(config => {
  // 在发送请求之前做些什么
  config.withCredentials=true;
  config.headers['Authorization'] = 'f80e833e-cc55-41e6-a655-43ac57d5f483' // 让每个请求携带自定义token 请根据实际情况自行修改
  config.withCredentials = true
  // if (store.getters.token) {
  //   config.headers['Authorization'] = store.getters.token // 让每个请求携带自定义token 请根据实际情况自行修改
  //   config.withCredentials = true
  // }
  //在发送请求之前如果为post序列化请求参数
  if (config.method === 'post') {
    if (config.data == undefined) {
      config.data = JSON.stringify({
        reqBody: {}
      })
    } else {
      config.data = JSON.stringify({
        reqBody: config.data
      })
    }
  }
  //定义文件传输方法
  if (config.method == 'filepost') {
    config.method = 'post';
    config.headers['Content-Type'] = 'multipart/form-data';
  }
  return config;
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error);
});

// 添加响应拦截器
service.interceptors.response.use(response => {
  // 对响应数据做点什么
  if (response.status !== 200) {
    Message({
      message: response.message || 'error',
      type: 'error',
      duration: 60 * 1000,
      showClose: true
    });

    //具体状态码需要根据项目中的实际约定的错误状态吗进行判断
    //根据返回的状态吗进行一些操作，诸如 登录过期 错误提示 长时间停留失效等
    // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
    if (response.status === 50008 || response.status === 50012 || response.status === 50014) {
      // to re-login
      MessageBox.confirm('You have been logged out, you can cancel to stay on this page, or log in again', 'Confirm logout', {
        confirmButtonText: 'Re-Login',
        cancelButtonText: 'Cancel',
        type: 'warning'
      }).then(() => {
        //重新登录接口调用 更新store存储的token
        // store.dispatch('user/resetToken').then(() => {
        //   location.reload();
        // });
      });
    }
    return Promise.reject(response.message || 'error');
  }
  else {
    //正常拿到数据
    return response;
  }
}, error => {
  // 对响应错误做点什么
  return Promise.reject(error);
});
export default service